// 导入自定义的ajax模块，包含isLogin方法用于检查用户登录状态，ajax方法用于发送异步HTTP请求。
import { ajax, isLogin } from '../utils/ajax.js';

// 导入jQuery库，用于DOM操作和事件处理。
import '../lib/jquery.js';

// 导入密码格式正则表达式校验方法。
import { pwdTest } from '../utils/reg.js';

// 使用自执行的异步函数，避免外部变量污染。
(async function() {
    // 调用isLogin方法检查用户是否登录，该方法返回一个包含状态、用户信息和令牌的对象。
    let { status, user, token } = await isLogin();
    
    // 如果用户未登录（status不等于1），则提示用户登录，并重定向到登录页面。
    if (status !== 1) {
        alert('请先登录！');
        location.href = './login.html';
    }

    // 为页面中的表单元素绑定提交事件处理器。
    $('form').on('submit', async function(e) {
        // 阻止表单的默认提交行为，例如页面跳转或刷新。
        e.preventDefault();

        // 获取用户在表单中输入的旧密码、新密码和重复新密码。
        let oldPassword = $('.oldpassword').val();
        let newPassword = $('.newpassword').val();
        let rNewPassword = $('.rnewpassword').val();

        // 验证输入的密码是否为空，如果为空，则弹出警告并终止后续操作。
        if (!oldPassword){
             alert('旧密码不能为空');
             return
        } 
        if (!newPassword) {
            alert('新密码不能为空');
            return
       } 
        if (!rNewPassword) {
            alert('确认新密码不能为空');
            return
       } 

        // 使用pwdTest方法验证新密码的格式是否正确，如果不正确，则弹出警告并终止后续操作。
        if (!pwdTest(newPassword)){
            alert('新密码格式错误');
            return
       } 
        // 验证用户输入的新密码和重复新密码是否一致，如果不一致，则弹出警告并终止后续操作。
        if (newPassword !== rNewPassword) {
            alert('两次密码不一致');
            return
       } 

        // 准备发送到服务器的数据，包含用户ID、旧密码、新密码和重复新密码。
        let data = {
            id: user.id,
            oldPassword: oldPassword,
            newPassword: newPassword,
            rNewPassword: rNewPassword
        };

        try {
            // 发送异步POST请求到'/users/rpwd'端点，请求修改密码。
            // 在请求头部添加授权令牌，用于验证用户身份。
            let { data: { code } } = await ajax.post('/users/rpwd', data, {
                headers: { authorization: token }
            });

            // 如果服务端返回的状态码不等于1，表示修改密码失败，则弹出警告。
            if (code !== 1) return alert('修改失败');

            // 修改密码成功后，从localStorage中移除旧的令牌和用户ID。
            localStorage.removeItem('token');
            localStorage.removeItem('uid');

            // 提示用户修改密码成功，并重定向到登录页面。
            alert('修改成功，点击确定跳转至登录页面');
            location.href = './login.html';
        } catch (error) {
            // 捕获并处理请求过程中发生的任何错误，弹出相应的错误信息。
            alert('发生错误：' + (error.message || '未知错误'));
        }
    });
})();